package com.petdog.infrastructure.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.petdog.infrastructure.entity.Community;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 社区Mapper接口
 * 提供社区相关的数据库操作
 */
@Mapper
public interface CommunityMapper extends BaseMapper<Community> {
    
    /**
     * 检查社区是否存在
     * @param communityId 社区ID
     * @return 存在返回1，不存在返回0
     */
    @Select("SELECT COUNT(*) FROM pet_community_table WHERE community_id = #{communityId}")
    int existsById(@Param("communityId") Long communityId);
    
    /**
     * 分页查询社区列表
     * @param params 查询参数
     * @return 社区列表
     */
    List<Community> selectPage(Map<String, Object> params);
    
    /**
     * 搜索社区
     * @param params 搜索参数
     * @return 匹配的社区列表
     */
    List<Community> search(Map<String, Object> params);
    
    /**
     * 查询社区详情
     * @param communityId 社区ID
     * @return 社区详情
     */
    Community selectDetail(@Param("communityId") Long communityId);
    
    /**
     * 查询热门社区
     * @param limit 查询数量限制
     * @return 热门社区列表
     */
    List<Community> selectHotCommunities(@Param("limit") Integer limit);
    
    /**
     * 查询用户加入的社区
     * @param userId 用户ID
     * @return 用户加入的社区列表
     */
    List<Community> selectByUserId(@Param("userId") Long userId);
    
    /**
     * 获取社区总条数
     * @param params 查询参数
     * @return 社区总条数
     */
    long countCommunities(Map<String, Object> params);
    
    /**
     * 获取搜索社区的总条数
     * @param params 搜索参数
     * @return 搜索结果总条数
     */
    long countSearchCommunities(Map<String, Object> params);
    
    /**
     * 更新社区成员数量
     * @param communityId 社区ID
     * @param memberCount 成员数量
     * @return 影响的行数
     */
    int updateMemberCount(@Param("communityId") Long communityId, @Param("memberCount") Integer memberCount);
    
    /**
     * 更新社区帖子数量
     * @param communityId 社区ID
     * @param postCount 帖子数量
     * @return 影响的行数
     */
    int updatePostCount(@Param("communityId") Long communityId, @Param("postCount") Integer postCount);
    
    /**
     * 更新社区最后活跃时间
     * @param communityId 社区ID
     * @return 影响的行数
     */
    int updateLastActiveTime(@Param("communityId") Long communityId);
}
